﻿/*
 * Created by SharpDevelop.
 * User: CeCi
 * Date: 14/04/2014
 * Time: 07:32 p.m.
 * 
 * To change this template use Tools | Options | Coding | Edit Standard Headers.
 */
using System;
using System.Data;
using System.Collections.Generic;
using Gestión_UTN.factories;

namespace Gestión_UTN.blimpl
{
    /// <summary>
    /// Description of regularidadblimpl.
    /// </summary>
    public class regularidadblimpl : bl.regularidadbl
    {
        private static da.regularidadda createRegularidad = dafactory.createRegularidad();
        private static bl.alumnobl createAlumno = blfactory.createAlumno();
        private static bl.materiabl createMateria = blfactory.createMateria();

        public regularidadblimpl()
        {
        }

        public bool SaveRegularidad(Gestión_UTN.bo.Regularidadbo reg)
        {
            bool ingresada = false;

            try
            {
                ingresada = (null != reg)
                    ? createRegularidad.SaveRegularidad(reg.Alumno.Dni, reg.Materia.Id, reg.Fecha)
                    : false;
            }
            catch (exceptions.daexception ex)
            {
                ingresada = false;
                throw new exceptions.blexception(ex.Message);
            }
            catch (Exception ex)
            {
                ingresada = false;
                throw new exceptions.blexception(ex.Message);
            }

            return ingresada;
        }

        public bool DeleteRegularidad(Gestión_UTN.bo.Regularidadbo reg)
        {
            bool eliminada = false;

            try
            {
                eliminada = (null != reg)
                    ? createRegularidad.DeleteRegularidad(reg.Alumno.Dni,
                                                          reg.Materia.Id, reg.Fecha)
                    : false;

            }
            catch (exceptions.daexception ex)
            {
                eliminada = false;
                throw new exceptions.blexception(ex.Message);
            }
            catch (Exception ex)
            {
                eliminada = false;
                throw new exceptions.blexception(ex.Message);
            }

            return eliminada;
        }

        public bool ModifyRegularidad(Gestión_UTN.bo.Regularidadbo reg, Gestión_UTN.bo.Regularidadbo reg_anterior)
        {
            bool modificada = false;

            try
            {
                modificada = (null != reg && null != reg_anterior)
                    ? createRegularidad.ModifyRegularidad(reg_anterior.Alumno.Dni, reg_anterior.Materia.Id,
                                                          reg_anterior.Fecha, reg.Alumno.Dni, reg.Materia.Id,
                                                          reg.Fecha)
                    : false;
            }
            catch (exceptions.daexception ex)
            {
                modificada = false;
                throw new exceptions.blexception(ex.Message);
            }
            catch (Exception ex)
            {
                modificada = false;
                throw new exceptions.blexception(ex.Message);
            }

            return modificada;
        }

        public DataTable FindAllRegularidades()
        {
            DataTable tablaRegularidades = null;

            try
            {
                tablaRegularidades = createRegularidad.FindAllRegularidades();
            }
            catch (exceptions.daexception ex)
            {
                tablaRegularidades = null;
                throw new exceptions.blexception(ex.Message);
            }
            catch (Exception ex)
            {
                tablaRegularidades = null;
                throw new exceptions.blexception(ex.Message);
            }

            return tablaRegularidades;
        }

        public List<Gestión_UTN.bo.Regularidadbo> FindRegularidadByDni(int alu_dni)
        {
            List<bo.Regularidadbo> regularidades = null;

            try
            {
                List<Entities.Regularidad> regs = (0 != alu_dni)
                    ? createRegularidad.FindRegularidadByDni(alu_dni)
                    : null;

                if (null != regs)
                {
                    regularidades = new List<bo.Regularidadbo>();

                    foreach (var r in regs)
                    {
                        bo.Alumnobo alu = createAlumno.FindAlumnoByDNI(r.Alu_dni);
                        bo.Materiabo mat = createMateria.FindMateriaByMatId(r.Mat_id);

                        bo.Regularidadbo reg = new bo.Regularidadbo(alu, mat, r.Fecha);

                        regularidades.Add(reg);

                        reg = null;
                    }
                }
            }
            catch (exceptions.daexception ex)
            {
                regularidades = null;
                throw new exceptions.blexception(ex.Message);
            }
            catch (Exception ex)
            {
                regularidades = null;
                throw new exceptions.blexception(ex.Message);
            }

            return regularidades;
        }

        public List<Gestión_UTN.bo.Regularidadbo> FindRegularidadByMateria(int mat_id)
        {
            List<bo.Regularidadbo> regularidades = null;

            try
            {
                List<Entities.Regularidad> regs = (0 != mat_id)
                    ? createRegularidad.FindRegularidadByMateria(mat_id)
                    : null;

                if (null != regs)
                {
                    regularidades = new List<bo.Regularidadbo>();

                    foreach (var r in regs)
                    {
                        bo.Alumnobo alu = createAlumno.FindAlumnoByDNI(r.Alu_dni);
                        bo.Materiabo mat = createMateria.FindMateriaByMatId(r.Mat_id);

                        bo.Regularidadbo reg = new bo.Regularidadbo(alu, mat, r.Fecha);

                        regularidades.Add(reg);

                        reg = null;
                    }
                }
            }
            catch (exceptions.daexception ex)
            {
                regularidades = null;
                throw new exceptions.blexception(ex.Message);
            }
            catch (Exception ex)
            {
                regularidades = null;
                throw new exceptions.blexception(ex.Message);
            }

            return regularidades;
        }
    }
}
